perm filename STRUCT[NEW,LSP] blob sn#620904 filedate 1981-10-17 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00030 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	   -*-MIDAS-*-
C00005 00003
C00008 00004
C00011 00005
C00015 00006
C00017 00007
C00020 00008
C00023 00009
C00025 00010
C00027 00011
C00029 00012
C00034 00013
C00036 00014
C00040 00015
C00042 00016
C00045 00017
C00046 00018
C00048 00019
C00051 00020
C00054 00021
C00056 00022
C00058 00023
C00062 00024
C00065 00025
C00067 00026
C00070 00027
C00073 00028
C00075 00029
C00077 00030
C00078 ENDMK
C⊗;
;;;   -*-MIDAS-*-
;;;   **************************************************************
;;;   ***** MACLISP ****** INITIAL LIST STRUCTURE ******************
;;;   **************************************************************
;;;   ** (C) COPYRIGHT 1981 MASSACHUSETTS INSTITUTE OF TECHNOLOGY **
;;;   ****** THIS IS A READ-ONLY FILE! (ALL WRITES RESERVED) *******
;;;   **************************************************************



SUBTTL	MACROS FOR CREATING INITIAL LIST STRUCTURE

PFXEST==3200			;ESTIMATED SPACE NEEDED FOR PURE FIXNUMS
SYMEST==1100			;ESTIMATED INITIAL NUMBER OF LISP SYMBOLS
LSYALC==20
GSNSYSG==<SYMEST+SEGSIZ-1>/SEGSIZ	;GUESS AT THE NUMBER OF SYM SEGS NEEDED
GSNSY2==<<SYMEST*2>+SEGSIZ-1>/SEGSIZ	;GUESS AT THE NUMBER OF SY2 SEGS NEEDED
GSNPFXSG==<PFXEST+SEGSIZ-1>/SEGSIZ	;GUESS AT THE NUMBER OF PFX SEGS NEEDED

MAYBE NXVCSG==PAGING*2000/SEGSIZ

.NSTGWD		;NO STORAGE WORDS OVER MACRO DEFINITIONS

KNOB==0		;NUMBER OF OBJECTS FOR OBARRAY
.XCREF KNOB




DEFINE PUTOB A
REL$ ADDOB \A-.RL1,\KNOB
REL% ADDOB \A,\KNOB
TERMIN

DEFINE ADDOB A,N
DEFINE OB!N
REL$ .RL1+A
REL% A
TERMIN
KNOB==KNOB+1
TERMIN

;;; STANDARD FUNCTION MAKERS

;;; MKAT <PNAME/INTERNAL-NAME>,<PROP-NAME>,<SPACE-FOR-Q-LABEL>,<ARGS-PROP>
;;; MKAT1 <PNAME>,<PROP-NAME>,<SPACE-FOR-Q-LABEL>,<INTERNAL-NAME>,<ARGS-PROP>

DEFINE MKAT A,B,C,AR
	Q!B %
	A,,NIL
RMTAH1 [C]A,PNL-2,[A]AR
TERMIN

DEFINE MKAT1 A,B,C,D,AR,IP
	Q!B %
	D,,NIL
RMTAH1 [C]D,PNL-2,[A]AR,,IP
TERMIN


;;; MKAT2 USED TO CREATE AUTOLOAD ATOMS
;;; MKAT2 <ATOM-NAME>,<BRIEF-NAME-FOR-AUTOLOAD-PROP>,<LABEL-FOR-HEADER>

DEFINE MKAT2 A,D,C
	QAUTOLOAD %
	QFL.!D,,NIL
IFSN [C], RMTAH1 [ ]C,PNL-2,[A]
IFSE [C], RMTAH1 [ ]A,PNL-2,[A]
TERMIN


;;; MAKE AN ATOM WITH AUTOLOAD PROPERTY FROM A SHARED PROPERTY LIST
;;; <PNAME>,<2-CHAR-PLIST-ID>,<BRIEF-INTERNAL-NAME>,<NO.-OF-ARGS>
DEFINE MKAL A,D,C,AR,IP
IFSN [C], RMTAH1 [ ]C,D!$AL,[A]AR,,IP
IFSE [C], RMTAH1 ,,D!$AL,[A]AR,,IP
TERMIN

;;; SAME AS MKAL, BUT WITH A VALUE CELL.
;;;   "BRIEF" INTERNAL NAME MAY NOT BE OMITTED
DEFINE MKALV A,D,C,AR,VAL,IP
RMTAH1 [ ]C,D!$AL,[A]AR,V!C,IP
RMTVC V!C,VAL
TERMIN

;;; MAKES AN ATOM WITH A VALUE CELL, BUT NO OTHER PROPERTIES
;;; MKAV <PNAME>,<LABEL-FOR-VCELL>,<CONTENTS-OF-VCELL>,<LABEL-FOR-HEADER>

DEFINE MKAV PN,VCL,C,D,IP
IFSN [D], RMTAH1 [ ]D,,[PN],C.,IP
IFSE [D], RMTAH1 ,,,[PN],C.,IP
C..==.
LOC C.
IFSN [VCL],   VCL:
.ELSE,   V!PN:
	IFSN [C],	C
	.ELSE,		NIL 
C.==.
LOC C..
TERMIN

;;; MAKES A FUNCTION WITH A VALUE CELL
;;; MKFV <PNAME>,<INTERNAL-NAME>,<PROP-NAME>,<INITIAL-VALUE>,<ARGS-PROP>

DEFINE MKFV PN,B,C,D,AR,IP
	Q!C %
	B,,NIL
RMTAH1 [ ]B,PNL-2,[PN]AR,V!B,IP
RMTVC V!B,D
TERMIN

;;; STRINGS TOGETHER THE WORDS OF A PNAME INTO A LIST

DEFINE APN,PN
	(F.)!REPEAT <<.LENGTH }PN}>+4>/5-1,[%
(F.+.RPCNT+1)]
PNL==.
LOC F.
ASCII }PN}
F.==.
LOC PNL
TERMIN




;;; MAKES A "SYSTEM" ATOM.  USUSALLY HAS NO PROPERTIES.
;;; MSA <INTERNAL-NAME>,<PNAME>

DEFINE MSA LN,PN
RMTAH1 [ ]LN,,[PN]
TERMIN


;;; MAKE A "RANDOM ATOM" (OR ATOMS)

DEFINE MRA PNS
IRP PN,,[PNS]
MSA PN,PN
TERMIN
TERMIN

;;; C = <SPACE> MEANS THAT WE SHOULD HAVE A LABEL FOR THE HEADER
;;; D IS THE LABEL, MORE OR LESS, IF C IS A <SPACE>
;;; PL IS FLAG FOR PROPERTY LIST.  IF NULL, THEN NIL [= 0] GETS 
;;;    ASSEMBLED.  FOR MKAT CASE, IT MUST BE "PNL-2", SINCE THE PROPERTY 
;;;    LIST WILL ALWAYS HAVE 2 CELLS JUST PRECEEDING THE PNAME-LIST
;;; PN IS THE PNAME STRING, 
;;; AR THE ARGS PROPERTY, 
;;; VC THE LABEL OF THE VALUE CELL
;;; IP IF NOT NULL, IS A MACRO WHICH SHOULD ADD A PREFIX TO THE PNAME


DEFINE RMTAH1 C,D,PL,PN,AR,VC,IP
PNL==.
LOC S.
PUTOB .
IFSE [C] , Q!D:
		B.,,PL
S.==.
LOC B.
IFSE [VC], 777300,,SUNBOUND
.ELSE 	   777300,,VC
	    NN!AR,,PNL
B.==.
LOC PNL
IFSN [IP], IP
APN [PN]
TERMIN


;;; REMOTE VALUE CELL MAKER

DEFINE RMTVC A,C
ZZ==.
LOC C.
A:
IFSN [C],	C
.ELSE,		NIL
C.==.
LOC ZZ
TERMIN



;;; ARGS TO IRP IN GROUPS OF 4 FOR EASY COUNTING

IRP Q,,[0,,1,2
3,4,5,01
12,23,16,36
08,1777,2777,4777,02
13,25,34,35,45
03,27,37,04,58
3777,17]R,,[1,0,2,3
4,5,6,1002
2003,3004,2007,4007
1011,2777,3777,5777,1003
2004,3006,4005,4006,5006
1004,3010,4010,1005,6011
4777,2010]
NN!Q==R
TERMIN		;FOR BIBOP ARGS PROPERTIES



SUBTTL STARTS FOR SAR, VC, IS2, AND SYM [SYMBOL-HEADER] SPACES

;;; STATE OF THE WORLD HERE HAD BETTER BE 
;;; 1) LOSEG IF IN D10
;;; 2) BEGINNING ON A SEGMENT BOUNDARY

.XCREF RMTAH1 MKAT MKAT1 MKAT2 MKAV MKFV RMTVC MSA 
   .XCREF MKAL MKALV

.YSTGWD		;STORAGE WORDS ARE OKAY NOW

	PGBOT ATM

BLSTIM==.MRUNT


;;; FORMAT OF SYMBOL HEADER FOR BIBOP:
;;; THE MAIN HEADER OF A SYMBOL IS A SINGLE WORD IN SYMBOL SPACE.
;;; THE RIGHT HALF CONTAINS THE PROPERTY LIST, AND THE LEFT HALF
;;; POINTS TO THE REST OF THE HEADER, WHICH IS IN THE IS2 OR SY2 AREA.
;;; SINCE THE REST OF THE HEADER (ALSO CALLED A "SYMBOL BLOCK") MUST
;;; LIE ON AN EVEN WORD BOUNDARY, THE LOW BIT OF THE LEFT HALF OF
;;; THE MAIN HEADER IS NORMALLY ZERO. THIS BIT IS USED BY THE
;;; GARBAGE COLLECTOR FOR MARKING PURPOSES, AND THEN RESET TO ZERO.
;;; THE SYMBOL BLOCK IS 2 WORDS LONG:
;;;		<VARIOUS BITS>,,<POINTER TO VALUE CELL>
;;;		<ARGS PROPERTY>,,<PNAME LIST>
;;; THE "VARIOUS BITS" ARE:
;;;	4.9-3.9	ONES (FOR NO PARTICULARLY GOOD REASON)
;;;	3.9	ZERO (RESERVED FOR SPECIAL VALUE CELL/LAP HACK)
;;;	3.8	1 => SYMBOL BLOCK MAY BE PURE (SEE GCMARK)
;;;	3.7	ONE IFF COMPILED CODE NEEDS THE SYMBOL
;;;	3.6	ONE IFF COMPILED CODE REFERENCES BY OTHER THAN CALL UUO
;;;		(IMPLIES 3.7 WHICH *MUST* ALSO BE ON)
;;;	3.5-3.1	ZERO (SO CAN INDIRECT THROUGH THE WORD TO GET VALUE)
;;; THE ARGS PROPERTY IS IN THE SAME FORMAT FASLOAD USES,
;;; TWO NINE-BIT BYTES DECODED AS FOLLOWS:
;;;		0 => NIL
;;;		777 => 777 (EFFECTIVELY INFINITY)
;;;		N => N-1, N NOT 0 OR 777
;;; THUS 000006 = (NIL . 5), 004005 = (3 . 4), AND 002777 = (1 . 777)




SPCBOT SAR

DEDSAR:	     0,,ADEAD		;DEAD SAR (PROTECTED BY GC)
		TTDEAD
DBM:	     0,,ADEAD		;DEAD BLOCK MARKER
		TTDEAD
BSYSAR==.		;BEGINNING OF "SYSTEM" ARRAY PROPS (SEE SYSP)
OBARRAY:	AS<OBA+SX+GCP>,,IOBAR1	;OBARRAY
		TTS<1D+CN>,,IOBAR2(TT)
READTABLE:	AS<RDT+FX>,,RSXTB1	;READTABLE
		TTS<1D+CN>,,RCT(TT)
PRDTBL:		AS<RDT+FX>,,RSXTB2	;PURE READTABLE
		TTS<1D+CN>,,RCT0(TT)
TTYIFA:		AS<FIL+SX+GCP>,,TTYIF1	;TTY INPUT FILE ARRAY
		TTS<1D+CL+CN+TY>,,TTYIF2(TT)
TTYOFA:		AS<FIL+SX+GCP>,,TTYOF1	;TTY OUTPUT FILE ARRAY
		TTS<1D+CL+CN+TY+IO>,,TTYOF2(TT)
INIIFA:		AS<FIL+SX+GCP>,,INIIF1	;INIT FILE ARRAY
		TTS<1D+CL>,,INIIF2(TT)
STR%AR:		ADEAD
		TTDEDC

ESYSAR==.

SPCTOP SAR,ILS,[SAR]


;;; BEGINS ON A SEGMENT BOUNDARY, BECAUSE OF THE "SPCTOP SAR"

SPCBOT VC
C.==.	;LOCATION COUNTER FOR VALUE CELL SPACE
	;;; NOTE THAT VALUE CELLS FOR T, NIL, UNBOUND, AND UBAR 
	;;; ARE IN PURE FREE STORAGE
BLOCK 400
SEGUP .
BXVCSG==.
IFN NXVCSG,[
	PAGEUP
	BXVCSG==.
	LOC .+NXVCSG*SEGSIZ-1
	PAGEUP
]
EVCSG==.


SPCBOT IS2
SY2ALC:
LOC .+2*LSYALC
SPCTOP IS2,ILS,[IMPURE SYMBOL BLOCK]



SPCBOT SYM

TRUTH:	$$$TRUTH,,NIL		;ATOM HEADER FOR T
	PUTOB TRUTH
REL$	ADDOB -.RL1+NIL,\KNOB
REL%	ADDOB NIL,\KNOB
;;;	CROCK TO PUTOB NIL CORRECTLY

QUNBOUND:	$$$UNBOUND,,NIL	;INTERNAL UNBOUND MARKER
SYALC:	BLOCK LSYALC	;FOR ALLOC
S.==.	;LOCATION COUNTER FOR SYMBOL SPACE

SEGUP BSYMSG+GSNSYSG*SEGSIZ-1
		;END OF SYMBOL GUESS
ESYMGS==.
PAGEUP



SUBTTL STARTS FOR SY2, PFX, AND PFS [PURE LIST] SPACES

10$	$HISEG

SPCBOT SY2
$$$TRUTH:	777300,,VTRUTH
		0,,$$TRUTH
$$$UNBOUND:	777300,,SUNBOUND
		0,,$$UNBOUND

B.==.	;LOCATION COUNTER FOR SYMBOL BLOCK SPACE

SEGUP BSY2SG+GSNSY2*SEGSIZ-1



	SPCBOT PFX

INR70:	R70

IFN D10,[
IFE SAIL,[
IPPN1:		.		;INITIAL PPN FOR LISP'S "SYS" DEVICE
IPPN2:		.
]	;END OF IFE SAIL
;for SAIL, we have to do the definition after "MAC" and "LSP" are defined
]	;END OF IFN D10


;; HAC FOR MINIMIZING USAGES OF "+INTERNAL-" IN PNAMES
;; MACROS NAMES %DVST, %PIPN, %ARRY, %SIEX, %FIXN, %FLON 
IRP A,,[DVST,DEFM,PIPN,MXPN,ARRY,SIEX,SICH,FIXN,FLON,MTPL,READ
FEXF,SIDC,VALU]B,,[defvs,DEFMA,+INTERNAL-,MACROEXPAN,ARRAY,SI:EX
SI:CH,FIXNU,FLONU,MULTIPLE-VALUE-,READ-,FILE-EXIT-FUNCT,SI:DEFCLAS,VALUE]
$$!A:	ASCII \B\
DEFINE %!A
REPEAT <<.LENGTH }B}>+4>/5,[
	($$!A+.RPCNT) %
]
TERMIN
TERMIN

F.==.	;LOCATION COUNTER FOR PURE FIXNUMS - USED FOR PNAMES AND INUMS

SEGUP BPFXSG+GSNPFXSG*SEGSIZ-1
EPFXGS==.



SPCBOT PFS
BPURFS==.		;BEGINNING OF PURE FS (FOR INSERT FILE PAGE)




;;; FREE STORAGE STUFF THAT IS NEVER GC'ED, NOR DARE MARKED FROM (NON-BIBOP)

PWIOINT: NIL			   ;WITHOUT INTERRUPTS SPECIAL PURE LOCATION

  	$$UNBOUND:
			APN UNBOUND

  	$$NIL:			;PNAME FOR NIL
		APN NIL

VNIL:	NIL	;NIL'S VALUE CELL IS IN PFS - THAT WAY YOU CAN'T SETQ IT

  	$$TRUTH:		;PNAME OF T
		APN T
VT:
VTRUTH:	TRUTH	;LIKEWISE CAN'T SETQ T


;;; STANDARD UNBOUND VALUE CELL - POINTED TO BY ALL SYMBOLS WHICH
;;; DON'T HAVE THEIR OWN VALUE CELL. NOTE: ALL SUCH SYMBOLS ARE
;;; HELIOCENTRIC. MUST HAVE SUNBOUND ABOVE END OF VALUE CELL AREA
;;; - SEE GYSP5A AND SSYSTEM.

  	SUNBOUND:	QUNBOUND


SUBTTL	INITIAL PURE LIST STRUCTURE

PSBRL:	Q%ISM,,SBRL

SSSBRL:	QARRAY %
ASBRL:	QAUTOLOAD %
SYSBRL:	QARRAY %
SBRL:	QSUBR %
	QFSUBR %
	QLSUBR,,NIL

;; "GETL" list for FBOUNDP
FBDPL:	QEXPR %
	QFEXPR %
	QMACRO,,SBRL

QGRTL:	Q$GREAT,,NIL		;(>) FOR UGREAT

IGSBV:	OBARRAY,,READTABLE	;FOR "ERROR-BREAK-ENVIRONMENT"

QLSTF.X: QSTF.X,,NIL

IFN NEWRD,[
;;;INITIAL ASSQ LIST OF MACRO-FUNCTIONS
PRMCLS:		.+1,,.+2
		47,,QRDQTE
		.+1,,NIL
		73,,QRDSEMI
]	;END OF IFN NEWRD


BSYSAP==.		;BEGINNING OF SYSTEM AUTOLOAD PROPERTIES
;;; NOTE THAT DUE TO THE 6-CHAR LOSS, GRINDEF HAD TO BECOME GFN IN THE LABEL
;;;  HERE ARE THE NAMELISTS WHICH WILL BECOME AUTOLOAD PROPERTIES

;;; [EREAD,HELP,ALLFI,DUMPA,LEDIT,LISPT,HUMBLE],,[ER,HE,FL,DP,LE,LT,HM]

IRP A,,[GRIND,GFN,LAP,GETMIDASOP,SORT,LET,BACKQ,FORMAT,CGOL,DUMPARRAYS
DEFMACRO,$DFMX,DEFVST,$DEFVSX,%DEFVSY,MACAI,MLMAC,MLSUB,SETF,$EDIT
TRACE,SHARPM,STRING,SUBSEQ,EXTEND,EXTSTR,EXTBAS,EXTSFA,EXTMAC,BLTARRAY
ERRCK,CERROR,YESNOP,LOOP,DESCRIBE]B,,[GI,GE,LA,GT,SO,LM,BQ,FT,CG,DP,DM,MX
DV,DX,DY,MA,MM,MS,SF,ED,TR,SH,ST,SB,EX,ES,EB,EA,EM,BL,EC,CE,YN,LO,DS]
	QFL.!B:	IRACOM %
		Q!A,,IRATBL
	B!$AL:  QAUTOLOAD %
		QFL.!B,,NIL
TERMIN

IFN SAIL,[
	QFL.ER:	IRACOM %
		QEREAD,,IRATBL
	ER$AL:  QAUTOLOAD %
		QFL.ER,,NIL
	QFL.HE:	IRACOM %
		QHELP,,IRATBL
	HE$AL:  QAUTOLOAD %
		QFL.HE,,NIL
]

IFN ITS,[
	QFL.AL: IRACOM %
		QALLFILES,,IRATBL
	AL$AL:  QAUTOLOAD %
		QFL.AL,,NIL
]	;END OF IFN ITS
IFN JOBQIO\D20,[
QFL.LE:	IRACOM %
	QLEDIT,,IRATBL
LE$AL:  QAUTOLOAD %
	QFL.LE,,NIL
]
IFN JOBQIO,[
QFL.HM:	IRACOM %
	QHUMBLE,,IRATBL
HM$AL:  QAUTOLOAD %		;for HUMBLE
	QFL.HM,,NIL
QFL.LT:	IRACOM %		;for LISPT
	QLISPT,,IRATBL
LT$AL:  QAUTOLOAD %
	QFL.LT,,NIL
]		;END OF IFN JOBQIO

ESYSAP==.		;END OF SYSTEM AUTOLOAD PROPERTIES



Q%ALD:			;"AUTOLOAD-DEVICE", BUT NOTE Q%XALD BELOW!
20%	QDSK %
20$ 	QPS %
IT$ 	QLISP,,NIL
20$	QMACLISP,,NIL
IFN D10,[
	.+1,,NIL
	IPPN1 %
	IPPN2,,NIL
]	;END OF IFN D10
20$  Q%XALD: QDSK,,Q%ALD+1

QA%DDD:	IRACOM,,NIL	;AUTOLOAD DEFAULT DEVICE/DIRECTORY LIST
IRATBL:	QFASL,,NIL
IRACOM:	QLISP,,NIL	;STANDARD DEVICE/DIRECTORY FOR AUTOLOAD FILES 

IFN BIGNUM,[
BNM23A:	IN0 %
	IN1,,NIL
BNM23B:	IN0 %
	IN2,,NIL
BN.1A:	IN0+1,,NIL
BNV2A:	BNV1,,NIL
]		;END OF IFN BIGNUM


QTLIST:	TRUTH,,NIL
IFN ITS,[
QLSPOUT:	Q.LISP. %		;FOR ITS, (/.LISP/. OUTPUT)
		QOUTPUT,,NIL
]			;END OF IFN ITS
IFN D20,[
QLSPOUT:	QMACLISP %		;FOR D20, (MACLISP OUTPUT)
		QOUTPUT,,NIL
]			;END OF IFN D20
;QLSPOUT CONSTRUCTED AT RUN TIME FOR D10


QUWL:	QUWRITE,,NIL
QURL:	QUREAD,,NIL
LGOR:	QGO %
	QRETURN,,NIL

QNILSETQ:	QSETQ %		;FOR NIHIL ERROR MESSAGE
	.+1,,NIL
	NIL,,NIL

QTSETQ:	QSETQ %			;FOR VERITAS ERROR MESSAGE
	.+1,,NIL
	TRUTH,,NIL

QXSETQ:	QSETQ %			;FOR PURITAS ERROR MESSAGE
	QXSET1,,NIL

ARQLS:	QARRAY %		;(ARRAY ?)
$QMLST:	QM,,NIL			;LIST OF A QUESTION MARK: (?)

QSJCL:	QSTATUS %		;(STATUS JCL)
	QJCL,,NIL

SPCNAMES:			;(STATUS SPCNAMES)
	QSYMBOL %
	QARRAY %
PURSPCNAMES:			;(STATUS PURSPCNAMES)
	QLIST %
IFN HNKLOG,[
	RADIX 10.
	REPEAT HNKLOG+1, CONC QHUNK,\.RPCNT,,,.+1
	RADIX 8
]	;END OF IFN HNKLOG
BG$	QBIGNUM %
DX$	QDUPLEX %
CX$	QCOMPLEX %
DB$	QDOUBLE %
	QFLONUM %
	QFIXNUM ,,NIL

PDLNAMES:
IRPS XX,Y,[REG FL FX SPEC]
	Q!XX!PDL,,IFSE [Y][ ][.+1]
TERMIN


SUBTTL	RANDOM SYSTEMIC ATOMS


;; +INTERNAL-/'-MACRO *MUST* be first in this table, for (STATUS SYSTEM ...)
;; QRDQTE is first symbol except for TRUTH and QUNBOUND --RWK

RDQTEB=RDQTE		;THE OTHERS WIN BECAUSE THEY ARE 6 CHARS
IRP X,,[RDQTEB,RDSEMI,RDVBAR,RDDBLQ]Y,,[['],[;],[|],["]]
	MKAT1 [Y-MACRO]SUBR,[ ]X,0,%PIPN
TERMIN
	MKAT1 TTYSCAN-SUBR,SUBR,[ ]TTYBUF,3,%PIPN
	MKAT1 ↑B-BREAK,SUBR,[ ]CN.BB,2,%PIPN
	MKAT1 IOL-BREAK,SUBR,[ ]IOLB,1,%PIPN
	MKAT1 UREAD-EOFFN,SUBR,[ ]UREOF,2,%PIPN
	MKAT1 INCLUDE-EOFFN,SUBR,[ ]INCEOF,2,%PIPN
	MKAT1 TTY-ENDPAGEFN,SUBR,[ ]TTYMOR,1,%PIPN
IFN ITS+SAIL,[
	MKAT1 ↑Q-MACRO,SUBR,[ ]CTRLQ,0,%PIPN
 	MKAT1 ↑S-MACRO,SUBR,[ ]CTRLS,0,%PIPN
]	;END OF IFN ITS+SAIL

	MKAT1 *RSET-BREAK,SUBR,[ ]CB,1,%PIPN
IRP X,,[UDF,UBV,WTA,UGT,WNA,GCL,FAC]
	MKAT1 X-BREAK,SUBR,[ ]X!B,1,%PIPN
TERMIN

  	MKAT1 PDL-BREAK,SUBR,[ ]PDLB,1,%PIPN
  	MKAT1 GCO-BREAK,SUBR,[ ]GCOB,1,%PIPN
	MKAT1 AUTOLOAD,SUBR,[ ]IALB,1,%PIPN

	MKAT1 CHAR-N,SUBR,,%ISC.N,2,%PIPN
	MKAT1 RPLACHAR-N,SUBR,,%ISR.N,3,%PIPN
	MKAT1 STRING-WORD-N,SUBR,,%ISW.N,2,%PIPN
	MKAT1 SET-STRING-WORD-N,SUBR,,%ISSW.N,3,%PIPN


;;; NOTE WELL! the symbol headers for
;;; 		LIST, FIXNUM, FLONUM, DOUBLE, COMPLEX, DUPLEX, BIGNUM,
;;;		SYMBOL, <HUNKS>, RANDOM, ARRAY
;;;   must be allocated sequentially, in that order. [Note also that this
;;;   constraint overlaps the next constraint too.]  This is so that
;;;   certain routines, notably EVAL, may quickly dispatch thru a table
;;;   of routines, indexed by the sequence number of TYPEP of a form.

COMMENT # QLIST: QFIXNUM: QFLONUM: QDOUBLE: QCOMPLEX: QDUPLEX:
	  QBIGNUM: QSYMBOL: QHUNK0: ... QHUNKn:  QRANDOM: QARRAY: #
  		MKAT LIST,LSUBR,[ ]
		RMTAH1 [ ]FIXNUM,,M,,,%FIXN
		RMTAH1 [ ]FLONUM,,M,,,%FLON
DB$		MRA DOUBLE
CX$		MRA COMPLEX
DX$		MRA DUPLEX
BG$		MRA BIGNUM
  		MRA SYMBOL
IFN HNKLOG,[
    IRP X,,[0,1,2,3,4,5,6,7,8,9]SZ,,[2,4,8,16,32,64,128,256,512,1024]
	    MSA HUNK!X,HUNK!SZ
	    IFE .IRPCNT-HNKLOG, .ISTOP
    TERMIN
]	;END OF IFN HNKLOG
  		MKAT RANDOM,LSUBR,[ ]01

;;; NOTE WELL! the symbol headers for
;;; 		ARRAY, SUBR, FSUBR, LSUBR, EXPR, FEXPR, MACRO, AUTOLOAD
;;;   must be allocated sequentially, in that order. [Note also that this
;;;   constraint overlaps the preceeding, as well as the next constraint too.]
;;;   This is so that certain routines, notably EVAL and APPLY and UUO-handler,
;;;   may quickly determine whether a given property is a functional property.

  		MKAT ARRAY,FSUBR,[ ]
		MKAT SUBR,SUBR,[ ]1
	IRP A,,[FSUBR,LSUBR,EXPR,FEXPR]
		MRA A
	TERMIN
		MKAL MACRO,DM,MACRO

;;; NOTE WELL! the symbol headers for
;;; 		AUTOLOAD, ERRSET, *RSET-TRAP, 
;;; 		GC-DAEMON, GC-OVERFLOW, PDL-OVERFLOW
;;;   must be allocated sequentially, in that order -- .see uint90
;;;   [Note also that this  constraint overlaps the preceeding constraint too.]
;;;   This is so that the interrupt handler may have an easier time(?)

		MKAV AUTOLOAD,VAUTFN,QIALB,AUTOLOAD
		MKFV ERRSET,ERRSET,FSUBR
		MKAV *RSET-TRAP,V.TRAP,QCB,.R.TP
		MKAV GC-DAEMON,VGCDAEMON
		MKAV GC-OVERFLOW,VGCO,QGCOB,GCO
		MKAV PDL-OVERFLOW,VPDL,QPDLB,PDL

MRA [VALUE,LAMBDA,DSK,SYM,SPLICING,SINGLE,EVALARG,BPS,SPECIAL]

	MKAV [TTYSCAN-STRINGERS|]VTSCSR,ITSCSR,TSCSR
ITSCSR:	.+1,,.+2
	IN0+73,,IN0+15		;(#/; . #\CR)
	.+1,,.+2
	IN0+174,,IN0+174	;(#/| . #/|)
	.+1,,NIL
	IN0+42,,IN0+42		;(#/" . #/")

RMTAH1 [ ]%ISM,,STRING-MARKER,,,%PIPN
RMTAH1 [ ]$COMPLR,,COMPLR
;; see PLLISP in writeable free storage
RMTAH1 [ ]LISP,PLLISP,LISP,,SUNBOUND
	MRA [FASL,JCL,DDT]
	MSA %GLOBALSYM,GLOBALSYM
	MRA [LABEL,FUNARG]
SA$	MRA [MAC]
10$ 	MRA [LSP]
IFN SAIL,[
IPPN1==QMAC
IPPN2==QLSP
;see previous definitions of IPPNi for other systems
]	;END OF IFN SAIL


;Don't change order from here to &RESTV, must be consecutive with &OPTIONAL
;first and &RESTV last for DEFUN to work.

	IRP PN,,[WHOLE,OPTIONAL,REST,AUX]
		MSA %!PN,&!PN
	TERMIN
		MSA %RSTL,&RESTL
		MSA %RSTV,&RESTV

;;; NOTE WELL! the symbol headers for
;;; 		REGPDL, FLPDL, FXPDL, SPECPDL
;;;   must be allocated sequentially, in that order.  This is so that
;;;   status routines, and pdl-overflow routines may "index" off the kind
;;;   of pdl being talked about.

		MRA [REGPDL,FLPDL,FXPDL,SPECPDL]


;;; NEED COPIES OF DOUBLE, COMPLEX, DUPLEX, BIGNUM EVEN IF TYPES NOT IMPLEMENTED
.SEE LDATER
DB%		MRA DOUBLE
CX%		MRA COMPLEX
DX%		MRA DUPLEX
BG%		MRA BIGNUM
HN%		MRA HUNK

PG$		MRA PAGING
		MRA PPN
20$ 		MRA PS
IFN ITS,[
		MRA [ITS,AI,ML,MC,DM]
		MRA EXPERIMENTAL
		MRA .LISP.
]	;END OF IFN ITS
IFN D20,[
		MRA DEC20
		MSA TOPS20,TOPS-20
		MRA TENEX
]	;END OF IFN D20
IFN D10,[
		MRA DEC10
HS%		MRA ONESEGMENT
    IFE SAIL,[
		MRA CMU
		MSA TOPS10,TOPS-10
    ]		;END OF IFE SAIL
]	;END OF IFN D10
IFN USELESS,	MRA ROMAN
		MRA SAIL
IFN JOBQIO,	MRA JOB
		MRA [FILE,ECHO,CLA,IMAGE,BLOCK,NEWIO,OUTPUT,SCROLL]
		MRA [MACLISP,PDP10]
		MSA RDEOF,READ-EOF
		MSA CN.B,[↑B]
		MSA M,[?]
		MSA ..MIS,[**MISSING-ARG**]
		MSA LA,[←]
		MSA XPRHSH,EXPR-HASH
		MRA CALLI

;;; NOTE WELL! the symbol headers for
;;; 		ODDP, EVAL, DEPOSIT, EXAMINE
;;;   must be allocated sequentially, in that order.  This is so that
;;;   the machine-error interrupt handler may "index" off the kind
;;;   of interrupt being talked about.

				.SEE UINT32
	MKAT ODDP,SUBR,[ ]1
	MKFV EVAL,OEVAL,LSUBR,NIL,12
	MKAT DEPOSIT,SUBR,[ ]2
	MKAT EXAMINE,SUBR,[ ]1


SUBTTL	ATOMS FOR SUBRS

;DUMMY ATOM SO THAT BAKTRACE PRINTS SOMETHING REASONABLE IN CERTAIN SCREW CASES
	MKAT1 QMARK,SUBR,,QMARK,0
	MKAT GC,SUBR,,0
	MKAT1 ↑G,SUBR,,CTRLG,0



;;; NOTE WELL! the symbol headers for
;;; 		<all the carcdr functions>
;;;   must be allocated sequentially, in the order shown below; "CAR" must be
;;;   the firs, and "CDDDDR" the last, with labels for at least each of these
;;;   two.  This is so that the +INTERNAL-CARCDRP function may determine 
;;;   whether something is a carcdr operation by address comparison.

MKFV CAR,CAR,SUBR,,1
MKFV CDR,CDR,SUBR,,1
IRP A,,[CAAR,CADR,CDAR,CDDR,CAAAR,CAADR,CADAR,CADDR,CDAAR,CDADR,CDDAR,CDDDR
CAAAAR,CAAADR,CAADAR,CAADDR,CADAAR,CADADR,CADDAR,CADDDR,CDAAAR,CDAADR,CDADAR
CDADDR,CDDAAR,CDDADR,CDDDAR]
	MKAT A,SUBR,,1
TERMIN
	MKAT CDDDDR,SUBR,[ ]1

	MKAT1 CARCDRP,SUBR,,ICADRP,1,%PIPN

IRPS A,C,[FIXP FLOATP EVALFRAME ERRFRAME,BIGP,BOUNDP,FBOUNDP,PAIRP
LISTIFY NOT,ATOM TYPEP,EXPLODE MINUSP,PLUSP,NUMBERP ZEROP,INTERN,LAST
REVERSE,NREVERSE,READLIST,MAKNAM,LENGTH,ABS,MINUS,ADD1,SUB1,FLOAT
FLATSIZE FLATC ARG COS,SQRT,LOG,EXP,SXHASH NOINTERRUPT,REMOB,SYSP
MAKUNBOUND,IMPLODE,MUNKAM,MAKNUM,HAULONG,PLIST SYMEVAL,PUREP
WRITEABLEP]
	MKAT A,SUBR,[C]1
TERMIN

MKAT1 RETURN,SUBR,[ ]RETURN,1

;;; NOTE WELL! the symbol headers for
;;; 		RUNTIME, TIME
;;;   must be allocated sequentially, in that order.  This is so that
;;;   the alarmclock function may "index" off the kind of alarm required.

	MKAT1 RUNTIME,SUBR,[ ]$RUNTIME,0
	MKAT1 TIME,SUBR,[ ]$TIME,0

IRPS A,C,[FIX,IFIX,EXPLODEC NULL,ASCII ALLOC,NCONS,SLEEP,SIN]
	MKAT1 A,SUBR,[C]$!A,1
TERMIN
IRPS A,C,[XCONS GETCHARN,GET PNGET]
	MKAT1 A,SUBR,[C]$!A,2
TERMIN

MKFV PURCOPY,PURCOPY,SUBR,NIL,1
MKFV PUTPROP,PUTPROP,SUBR,PSBRL,3
MKAT1 PURIFY,SUBR,,$PURIFY,3
MKAT1 SYMBOLP,SUBR,,%SYMBOLP,1
MKAT1 EXPLODEN,SUBR,[ ]$$EXPLODEN,1
MKAT1 DIMS,SUBR,,ADIMS,1,%ARRY
MKAT1 -DIMENSION-N,SUBR,,ADIMN,2,%ARRY
MKAT1 [-#-DIMS]SUBR,,ANDIM,1,%ARRY
MKAT1 -TYPE,SUBR,,ARRTYP,1,%ARRY
MKAT1 [-CELL-LOCATION]SUBR,,VALLOC,1,%VALU 

IRPS A,C,[SUBLIS REMPROP SET,RPLACA,RPLACD,NTH,NTHCDR,DISPLACE,
EQ,FRETURN,FRETRY,EXPT,MEMQ,SETARG MEMBER,EQUAL GETL,ASSOC,ASSQ,
REMAINDER,ATAN,SAMEPNAMEP ALPHALESSP GETCHAR,COPYSYMBOL,PNPUT,
FILLARRAY NRECONC,SETPLIST]
	MKAT A,SUBR,[C]2
TERMIN


	MKAT1 *BREAK,SUBR,,$BREAK,2
	MKAT1 *THROW,SUBR,,.THROW,2


IFN HNKLOG,[
	MKAT CXR,SUBR,[ ]2
	MKFV MAKHUNK,MAKHUNK,SUBR,TRUTH,1
	MKFV HUNKP,HUNKP,SUBR,TRUTH,1
	MKAT HUNKSIZE,SUBR,,1
	MKAT HUNK,LSUBR,[ ]
	MKAT RPLACX,SUBR,,3
]		;END OF IFN HNKLOG


IFN USELESS,[
	MKAT1 [\\]SUBR,,.GCD,2
IRPS A,C,[RECLAIM,HAIPART,GCD]
	MKAT A,SUBR,[C]2
TERMIN
]

IRP A,,[LSH,ROT,FSC,ASH]
	MKAT1 A,SUBR,,$!A,2
TERMIN

IRP A,,[LOAD-BYTE,DEPOSIT-BYTE,LDB,DPB]B,,[LOADB,DEPOB,LDB,DPB]C,,[3,4,2,3]
	MKAT1 A,SUBR,,$!B,C
	MKAT1 *!A,SUBR,,%!B,C
TERMIN

	MKAT1 ↑,SUBR,,XPTII,2
	MKAT1 ↑$,SUBR,,XPTI$,2

	MKAT1 M-IDENTITY,SUBR,,FXIDEN,1,%FIXN
	MKAT1 M-IDENTITY,SUBR,,FLIDEN,1,%FLON

IRPS A,,[DIF,QUO]
	MKAT1 [*A]SUBR,,.!A,2
TERMIN

IRP A,,[1+,1-]B,,[ADD1,SUB1]
	IRP C,,[$,]D,,[$,I]
		MKAT1 [A!!C]SUBR,,[D!!B]1
	TERMIN
TERMIN


IRP A,,[>,<]B,,[GREAT,LESS]
	MKAT1 A,SUBR,[ ]$!B,2
TERMIN

MKAT1 =,SUBR,,$EQUAL,2
MKAT1 [\]SUBR,,REMAINDER,2

IRPS A,C,[SASSOC,SASSQ,SUBST SETSYNTAX]
	MKAT A,SUBR,[C]3
TERMIN

PG$ MKAT1 LH|,SUBR,,LHVBAR,2

SUBTTL	ATOMS FOR FSUBRS AND LSUBRS

IRPS A,C,[COND PROG QUOTE DO DECLARE PROGV,
DEFPROP BREAK GO ,
SETQ ERR SIGNP STORE STATUS SSTATUS FUNCTION CASEQ]
	MKAT A,FSUBR,[C]
TERMIN

	MKAT1 PUSH,FSUBR,[ ]$PUSH
	MKAT1 POP,FSUBR,[ ]$POP

	MKFV DEFUN,DEFUN,FSUBR,NIL
	MKAT1 COMMENT,FSUBR,[ ]$COMMENT
	MKAT1 UNWIND-PROTECT,FSUBR,[ ]UNWINP
	MKAT1 *CATCH,FSUBR,[ ].CATCH
	MKAT1 CATCHALL,FSUBR,,CATCHALL
	MKAT1 CATCH-BARRIER,FSUBR,,CATCHB
	MKAT1 AND,FSUBR,,$AND
	MKAT1 OR,FSUBR,,$OR
	MKAT1 EVAL-WHEN,FSUBR,[ ]EWHEN
	MKAT1 *FUNCTION,FSUBR,[ ]%%FUNCTION

;;; MUST HAVE (MAPLIST,MAPCAR,MAP,MAPC,MAPCON,MAPCAN) IN THAT ORDER
	MKAT MAPLIST,LSUBR,[ ]2777
	MKAT MAPCAR,LSUBR,[ ]2777
	MKAT1 MAP,LSUBR,[ ]$MAP,2777
	MKAT MAPC,LSUBR,[ ]2777
	MKAT MAPCON,LSUBR,[ ]2777
	MKAT1 MAPCAN,LSUBR,[ ]$MAPCAN,2777

	MKAT PROG1,LSUBR,[ ]1777
	MKAT PROG2,LSUBR,[ ]2777
	MKAT PROGN,LSUBR,[ ]
	MKAT BOOLE,LSUBR,,2777

IRPS A,C,[DELQ DELETE APPLY DELASSQ]
	MKAT A,LSUBR,[C]23
TERMIN

IT$	MKAT SYSCALL,LSUBR,[ ]2777
	MKAT1 LIST*,LSUBR,[ ]LIST.,1777
	MKAT1 MAKE-LIST,SUBR,[ ]MAKLST,1
	MKAT1 CONS,SUBR,,$C2NS,2
	MKAT FUNCALL,LSUBR,[ ]1777
	MKAT1 LEXPR-FUNCALL,LSUBR,[ ]%LXFC,2777
	MKAT1 ARRAYCALL,FSUBR,[ ]%ARRAYCALL
	MKAT SUBRCALL,FSUBR,[ ]
	MKAT1 LSUBRCALL,FSUBR,[ ]%LSUBRCALL

IRPS A,C,[VALRET BAKTRACE BAKLIST GENSYM ]
	MKAT A,LSUBR,[C]01
TERMIN

	MKAT SUSPEND,LSUBR,[ ]02
IFN USELESS,	MKAT CURSORPOS,LSUBR,[ ]03
	MKAT QUIT,LSUBR,[ ]01
	MKAT1 ERROR,LSUBR,[ ]$ERROR,03
	MKAT GETSP,LSUBR,[ ]12
	MKAT MAPATOMS,LSUBR,[ ]12

IRPS A,C,[NCONC PLUS,TIMES,DIFFERENCE,QUOTIENT,APPEND ]
	MKAT A,LSUBR,[C]
TERMIN


;;; MUST HAVE (MAX,GREATERP,MIN,LESSP) IN THAT ORDER
	MKAT MAX,LSUBR,[ ]1777
	MKAT GREATERP,LSUBR,[ ]2777
	MKAT MIN,LSUBR,[ ]1777
	MKAT LESSP,LSUBR,[ ]2777

;;; IN THE FOLLOWING, NOTE THAT +, -, *, AND / GET VALUE CELLS

IRP A,,[+,-,*,/]B,,[PLUS,DIFFERENCE,TIMES,QUOTIENT]
	MKFV [A]I!B,LSUBR,QI!B
TERMIN

IRP A,,[+,-,*,/]B,,[PLUS,DIFFERENCE,TIMES,QUOTIENT]
	MKAT1 [A!$]LSUBR,,[$!B]
TERMIN


	MKAT1 *REARRAY,LSUBR,[ ].REARRAY,17
	MKAT1 *ARRAY,LSUBR,[ ]%%ARRAY,27
	MKAT LISTARRAY,LSUBR,[ ]12



SUBTTL	ATOMS FOR LAP, FASLAP, AND FASLOAD USAGE

;;; SUBROUTINES USED BY COMPILER OUTPUT - ERGO, NEEDED BY LAP
;;; AND FASLOAD. ALSO OTHER GOODIES FOR LAP AND FASLAP.

IRP A,,[DELQ,DELETE,APPEND,TIMES,GREAT,LESS,PLUS,NCONC,APPLY]
	MKAT1 *A,SUBR,[ ].!A,2
TERMIN
IRP A,,[PRINT,PRIN1,PRINC,TERPRI,TYO]B,,[PRT,PR1,PRC,TRP,TYO]C,,[1,1,1,0,1]
	MKAT1 *!A,SUBR,[ ]B!$,C
TERMIN

IRP A,,[READ,READCH,TYI]B,,[READ,RDCH,TYI]C,,[0,0,0]
	MKAT1 *!A,SUBR,[ ]B!$,C
TERMIN
	MKAT1 *EVAL,SUBR,,EVAL,1
	MKAV PURE,VPURE,IN1*PAGING	;INIT TO NIL OR 1 (IF PAGING SYS)
  	MKAV *PURE,V.PURE
	MKAV PURCLOBRL
	MKAT1 FASLAPSETUP|,SUBR,,FSLSTP,1
	MKFV LAPSETUP|,LAPSETUP,SUBR,,2
	MKAT PAGEBPORG,SUBR,[ ]0
	MKFV TTSR|,TTSR,SUBR,,1
	MKAT GETDDTSYM,SUBR,[ ]1
	MKAT PUTDDTSYM,SUBR,,2
	MKFV GCPROTECT,GCPRO,SUBR,,2
	MKAV SYMBOLS,V$SYMBOLS,,$SYMBOLS
	MKFV FASLOAD,FASLOAD,FSUBR,SBRL
	MKAV IONS,VFEXITFUNCTIONS,,,%FEXF
	MKAV [IONS-DEFAULT]VFEXDEFAULT,,,%FEXF

SUBTTL ATOMS FOR AUTOLOAD FEATURES

	MRA [VERSION]

	MRA [STRING]
	MKAL MAKE-STRING,ST,,12
	MKAL STRING-PNPUT,ST,,2
	MKAL *:FIXNUM-TO-CHARACTER,ST,,1

	MKAL SUBSEQ,SB,SUBSEQ,13
	MKAL REPLACE,SB,,25
	IRP A,,[LIST,VECTOR,STRING,BITS]
	    MKAL TO-!A,SB,.TO.!A,13
	TERMIN

	MRA [SHARPM]
	MKAL DEFSHARP,SH
	MKAL [#-MACRO]SH,RDSHP,0,%PIPN
	MKAL SETSYNTAX-SHARP-MACRO,SH,,34
	MKAV [#-MACRO-DATALIST]V%MDL,NIL

	MRA [BACKQ]
	MKAV BACKQUOTE-EXPAND-WHEN,V%BEW,QOEVAL
	MKAL [`-expander|]BQ
	MKAL [`-macro|]BQ,I%B%F,0,%PIPN
	MKAL [,-macro|]BQ,I%C%F,0,%PIPN

	IRP A,,[LET,LET*,DESETQ]B,,[LET,LET.,DESETQ]
	    MKAL A,LM,B
	    MKAL [A!-EXPANDER-1]LM,,1
	TERMIN

	MKAL SETF,SF,SETF
	MSA STF.X,[SETF-X]
	MKAL SETF-X,SF,ISTFX,2,%PIPN
	MKAL PUSH-X,SF,IPUX,2,%PIPN
	MKAL POP-X,SF,IPOX,2,%PIPN


	RMTAH1 [ ]$DFMX,,X,,,%DEFM	;; MSA $DFMX,DEFMAX
	MKAV MACRO-EXPANSION-USE,V%MEU,Q%MXPD
	MKALV DED,MX,%MXPD,,,%MXPN
	MKAL [forget-macromemos|]MX,,1
	MKAL [FLUSH-MACROMEMOS]MX,,2
	MKAL MACROFETCH,MX,,1
	MKALV MACROMEMO,MX,%MCMO,3
	MKAL D,MX,,1,%MXPN
	MKAL D-1,MX,,1,%MXPN
	MKAL D-1*,MX,,1,%MXPN
	MKAL D-1*M,MX,MX1.M,1,%MXPN
	MKAL [TRY-AUTOLOADP]MX,,1,%PIPN

	MKAL CRO,DM,DEFMA,,%DEFM
	MKAL CRO-DISPLACE,DM,,,%DEFM
	MKAL [defmacro-1|]DM,DFM.1,2
	MKAV CRO-CHECK-ARGS,V%DCA,TRUTH,,%DEFM
	MKAV CRO-DISPLACE-CALL,V%DDC,TRUTH,,%DEFM
	MKAV CRO-FOR-COMPILING,V%DFC,TRUTH,,%DEFM
	MKALV [DEFUN&]DM,%DEFUN
	MKALV [&r-l|]DM,%R.L,3,QUNBOUND
;;; 	MKAL MACRO,DM,MACRO  	;;; NOTE THAT THIS MUST BE "ABOVE"


	MRA [MACAID]
	MKAL FLATTEN-SYMS,MA,,2
	MKALV [carcdrp|]MA,%%CRP,1,TRUTH
	MKAL [no-funp|]MA,,1
	MKAL DUP-P,MA,,1,%PIPN
	MKAL [side-effectsp|]MA,,1 
	MKAL [constant-p|]MA,,1
	MKAL DEFSIMPLEMAC,MA
	MKAL DEFCOMPLRMAC,MA
	MKAL DEFBOTHMACRO,MA
	MKAL SYMBOLCONC,MA,,1777

	MRA [MLMAC]
	MKAL HERALD,MM
	MKAL IF,MM
	MKAL SETQ-IF-UNBOUND,MM
	MKAL SELECTQ,MM
	MKAL CATCH,MM,CATCH
	MKAL THROW,MM,THROW
	MKAL DEFVAR,MM
	MKAL DEFCONST,MM
	MKAL PSETQ,MM
	MKAL MULTIPLE-VALUE,MM
	MKAL S,MM,,,%VALU
	MKAL LIST,MM,,,%MTPL
	MKAL BIND,MM,,,%MTPL
	MKAL WITH-INTERRUPTS,MM
	MKAL WITHOUT-INTERRUPTS,MM
	MKAL WITHOUT-TTY-INTERRUPTS,MM

	MRA [MLSUB]
	MKAL LISTP,MS,,1
	MKAL LIST|,MS,,1,%MTPL
	MKAL S-LIST,MS,,1,%VALU
	MKAL [ECK-MULTIPLICITIES]MS,,1,%SICH
	MKAL <=,MS,,2777
	MKAL >=,MS,,2777

	MKAL LOGAND,MS
	MKAL LOGIOR,MS
	MKAL LOGXOR,MS
	MKAL LOGNOT,MS
	MKAL MP,MS,,1,%FIXN
	MKAL MP,MS,,1,%FLON
	MKAL EVENP,MS

	MKAL SEND,EX,SEND,2777
	MKAL CLASSP,EX,,1
	MKAL CLASS-OF,EX,,1
	MKAL TENDP,EX,,1,%SIEX
	MKAL EXTENDP,EX,,1


	MRA [EXTBAS]
	MKAL SI:MAKE-EXTEND,EB,,2
	MKAL TEND,EB,,1777,%SIEX
	MKAL SI:XREF,EB,,2
	MKAL SI:XSET,EB,,3
	MKAL TEND-LENGTH,EB,,1,%SIEX

	MRA [EXTSTR]
	MKAL S*-2,ES,,45,%SIDC
	MKAL **SELF-EVAL**,ES
	MKAL **CLASS-SELF-EVAL**,EX

	MRA [EXTEND]
	MKAL PTR-TYPEP,EX,,1
	MKAL S*-1,EX,,34,%SIDC
	MKAL ADD-METHOD,EX,,3
	MKAL FIND-METHOD,EX,,2

	MKAL DESCRIBE,DS,DESCRIBE,12
	MKAL WHICH-OPERATIONS,DS,WOP,1

	MRA [YESNOP]
	MKAL Y-OR-N-P,YN
	MKAL YES-OR-NO-P,YN

	MRA [EXTMAC]
	MKAL DEFCLASS*,EM
	MKAL DEFMETHOD*,EM

	MKAL CERROR,CE,CERROR,4777
	MKAL FERROR,CE,,2777
	MKAL ERROR-RESTART,CE
	MKAL LOSSAGE,CE,,3,%PIPN

	MRA [EXTSFA]
	MKAL SFA-UNCLAIMED-MESSAGE,EA,,3

	MRA [ERRCK]
	MKAL CHECK-TYPE,EC
	MKAL [ECK-TYPER]EC,,3,%SICH
	MKAL CHECK-SUBSEQUENCE,EC
	MKAL [ECK-SUBSEQUENCER]EC,,58,%SICH


	MKAL DEFVST,DV,DEFVST

	RMTAH1 [ ]$DEFVSX,,DEFVSX
	MKAL SETVST,DX
	MKAL [t-construction|]DX,,2,%DVST
	MKAL [t-construction-1|]DX,,2,%DVST
	MKAL [t-selection-1|]DX,,1,%DVST
	MKAL [t-xref|]DX,,1,%DVST

	RMTAH1 [ ]%DEFVSY,,DEFVSY
	MKAL [t-typchk|]DY,,3,%DVST
	MKAL STRUCT-TYPEP,DY,,1
	MKAL [t-initialize|]DY,,5,%DVST


IRP A,,[GRIND,CGOLREAD,LAP,TRACE,CGOL]B,,[GI,CG,LA,TR,CG]
	MKAL A,B,A
TERMIN
	MKAL FORMAT,FT,FORMAT,2777
	MKAL GRIND0,GI
	MKALV GRINDEF,GE,GFN
	MKAL SPRINTER,GE,,1
	MKAL SPRIN1,GE,,12
	MKAL READMACROINVERSE,GE,$RMI

	MKAL GETMIDASOP,GT,GETMIDASOP,1
	MKAL SORT,SO,SORT,2
	MKAL SORTCAR,SO,,2
	MKALV EDIT,ED,$EDIT
	MKAL [LAP-A-LIST]LA
SA$	MKAT2 EREAD,ER
SA$	MKAT2 HELP,HE
IFN USELESS,[
	MKAL BLTARRAY,BL,BLTARRAY,2
	MKAL DUMPARRAYS,DP,DUMPARRAYS,2
	MKAL LOADARRAYS,DP,,1
]		;END OF IFN USELESS
IFN ITS,[
	MKAL ALLFILES,AL,ALLFILES,1
    IRP A,,[MAPALLFILES,DIRECTORY,MAPDIRECTORY]AR,,[2,12,23]
	MKAL A,AL,,AR
    TERMIN
]   		;END OF IFN ITS

IFN JOBQIO\D20	MKAL LEDIT,LE,LEDIT
IFN JOBQIO,[
	MKAL LISPT,LT,LISPT
	MKAL [INF-EDIT]LT
]		;END OF IFN JOBQIO
IT$ 	MRA [HUMBLE]
IT$	MKAL [CREATE-JOB]HM


	MKAL LOOP,LO,LOOP
	MKAL DEFINE-LOOP-PATH,LO

SUBTTL	ATOMS FOR ODDBALL FUNCTIONS AND VARIABLES

IFN ITS, MKFV ALARMCLOCK,ALARMCLOCK,SUBR,,2
IFE ITS,[
SA$	MKAV ALARMCLOCK
SA%	VALARM==VNIL
]	;END OF IFE ITS

;FOLLOWING SYMBOLS MUST BE IN THIS ORDER, JUST AFTER ALARMCLOCK -- .SEE UINT90
IFN USELESS,[	
    IFN ITS,[	
		MKAV CLI-MESSAGE,VCLI,,CLI
		MKAV MAR-BREAK,VMAR,,MAR
		MKAV TTY-RETURN,VTTR,,TTR
		MKAV SYS-DEATH,VSYSD,,SYSD
	]	    ;END OF IFN ITS
    IFN SAIL,[
     	REPEAT UIFSMI-1, 0
    	MKAV SI:SAIL-MAIL-SERVICE,V.SMS
    ]	    ;END OF IFN SAIL
]		;END OF IFN USELESS


	MKFV NOUUO,NOUUO,SUBR,,1
	MKFV NORET,NORET,SUBR,,1
	MKFV EVALHOOK,EVALHOOK,LSUBR,,23
	MKFV EVAL-*-PRINT,TLPRINT,SUBR,,1,%READ
	MKFV EVAL-PRINT-*,TLTERPRI,SUBR,,0,%READ
	MKFV *-READ-EVAL-PRINT,$TLREAD,SUBR,,0
	MKFV *-EVAL-PRINT,TLEVAL,SUBR,,1,%READ
	MKFV GCTWA,GCTWA,FSUBR
	MKFV ARGS,ARGS,LSUBR,,12
	MKFV *RSET,.RSET,SUBR,TRUTH,1
	MKFV *NOPOINT,.NOPOINT,SUBR,,1

	MKFV OBARRAY,OBARRAY,ARRAY,OBARRAY
	MKFV READTABLE,READTABLE,ARRAY,READTABLE

	MKAV ERROR-BREAK-ENVIRONMENT,VE.B.E,IGSBV

	MKAV *:TRUTH,VT.ITY,TRUTH
	MKAT1 [STR:ARRAY]ARRAY,,STR%AR

SUBTTL	ATOMS FOR NEWIO FUNCTIONS AND VARIABLES

IRPS A,C,[NAMELIST NAMESTRING SHORTNAMESTRING,TRUENAME INPUSH,PROBEF LOAD FILEP]
	MKAT A,SUBR,[C]1
TERMIN

	MKFV DEFAULTF,DEFAULTF,SUBR,,1
	MRA NODEFAULT
	MKAT1 FORCE-OUTPUT,SUBR,[ ]FORCE,1
	MKAT1 CLEAR-OUTPUT,SUBR,[ ]CLROUT,1
	MKAT1 CLEAR-INPUT,SUBR,[ ]CLRIN,1

IRPS A,C,[CLOSE DELETEF IN FASLP ]
	MKAT1 A,SUBR,[C]$!A,1
TERMIN

	MKAT1 +TYI,SUBR,,PTYI,1
	MKAT1 +TYO,SUBR,,PTYO,2
	MKAT1 UNTYI,SUBR,[ ]UNTYI,2
	MKAT1 OPEN,LSUBR,[ ]$OPEN,02
SA$	MKAT1 EOPEN,LSUBR,[ ]$EOPEN,04
	MKAT1 OUT,SUBR,[ ]$OUT,2
	MKAT1 INCLUDEF,SUBR,,.INCLU,1
	MKAT1 RENAMEF,SUBR,[ ]$RENAMEF,2
	MKAT CNAMEF,SUBR,[ ]2
	MKAT MERGEF,SUBR,,2
	MKAT1 LENGTHF,SUBR,[ ]$LENGTHF,1
	MKAT1 LISTEN,LSUBR,[ ]$LISTEN,01

IFN SFA,[
	MRA SFA
	MKAT1 SFA-CREATE,SUBR,,STCREA,3
	MKAT1 SFA-CALL,SUBR,,STCALL,3
	MKAT1 SFAP,SUBR,,STPRED,1
	MKAT1 SFA-GET,SUBR,,STGET,2
	MKAT1 SFA-STORE,SUBR,,STSTOR,3
	MRA PNAME		  ;Needed as symbolic name for 'PNAME' slot
	 ; Other symbolic slots are 'PLIST', 'FUNCTION', 'WHICH-OPERATIONS',
	 ;  AND 'XCONS'.  actually, 'which-operations' is cached on the plist.
	;MSA WOP,WHICH-OPERATIONS ;done for EXTEND above
	MRA FILEMODE
	;MRA TTYCONS 		  ;No longer needed - use 'XCONS' slot instead 
	MRA [TTYSCAN,TTYINT,TTYSIZE,TTYTYPE,OSPEED,LINMOD]
]		;END IFN SFA


IP↓(¬→α¬2~bn∞J,r&Q2,Z&21e*~&2*αV∞2⎇~∃2V
αB⊗:"bVBJ|∩∃2&t~2V∩-h4(&lZεQα
b~NV∃⊃2n∞hh*R⊗∀j&84PJ6.~2αVJ⊗!2VJ,
⊃2~≥*
H4PJ6.~2αV↑JM"∃2V=∩&R∃d2NV
⊂h(4(hR&JB~α¬12\J:~&d)2&:≥"ε∞-dzVR~Lb⊗M2,~">~Lb⊗Nv~a2nR∃*R!1bbt4(Lj.εY∧	12hRR⊗JlJ84(Lj.εY∧jN≡~Lb⊗M1e
R2&≥!26N<2&2⊗_h(4(Lj.~Y¬"f%1-"f%2e~V
Ie"Rf&4	1AHhP&6.
!EαJ,
∩2&t)22N,∩I2m¬i⊗J⊗"2&:*aAH4PJ6.ε"αRf&∧*⊗-2e~V
IeYαuA_h(4(Lj.~Y¬"f=1-"f=2e~V
Ie"Rf>4	1EHhP&6.
!EαB∀J:Q2e~V
IeYαu⊗¬∩&:Qc	H4(LjN¬↓-~2~B[:PRINT-SELF]
	MKFV PRIN1,%PR1,LSUBR,,12
	MKAT1 PRINC,LSUBR,[ ]%PRC,12
	MKAT1 [PRINT-OBJECT]LSUBR,[ ]%PRO,45
	MKAT1 [FLATSIZE-OBJECT]LSUBR,[ ]%FLO,45
	MKFV TERPRI,%TERPRI,LSUBR,TRUTH,01
	MKFV READ,OREAD,LSUBR,,02
	MKAT1 READCH,LSUBR,[ ]$READCH,02

IRPS A,C,[ENDPAGEFN EOFFN PAGEL CHARPOS LINENUM PAGENUM LINEL RUBOUT FILEPOS ERRPRINT ]
	MKAT A,LSUBR,[C]12
TERMIN

SUBTTL	ATOMS FOR VARIABLES AND USER INTERRUPT BREAKS

;;; TTYOPN WILL INIT VLINEL TO THE RIGHT THINGS.
;;; FOR NON-BIBOP, NOTE THAT LINEL AND CHRCT POINT INTO THE
;;; (UNRELOCATED!) INUM AREA DURING ALLOC. THEY WILL THUS
;;; HAVE THE RIGHT VALUES BUT THE WRONG TYPE (I.E. TYPEP
;;; OF THEM WOULD LOSE.) THUS PRINT ETC. SHOULD NOT CHECK
;;; TYPEP OF THESE THINGS. ALLOC REHACKS THEIR VALUES AFTERWARDS.
;;; CHRCT IS INITIALLY 777 SO ALLOC WON'T GENERATE CR'S.

COMMENT | VBPORG: VBPEND: VERRLIST: VTTY: VZUNDERFLOW: VZFUZZ: VCHRCT: VLINEL: |

IRP A,,[BPEND,BPORG,ERRLIST,TTY,ZUNDERFLOW]C,,[VBPE1,VBP1,,,]
	MKAV A,,C,A
TERMIN

SA$ 	MKAV SI:ECALLEDP,VECALL
SA$	MKAV SI:EJOBNUM,VEJOBN
BG$	MKAV ZFUZZ,,,ZFUZZ

COMMENT | VIBASE: VBASE: V%LEVEL: V%LENGTH: TAPRED: TTYOFF: TAPWRT: SIGNAL: |

;;; FOR NON-BIBOP, ALLOC REHACKS VBASE AND VIBASE AFTERWARDS.

   MKAV IBASE,,IN10,IBASE
   MKAV BASE,,IN10,BASE


IFN USELESS,[
	MKAV PRINLEVEL,V%LEVEL,,%LEVEL
	MKAV PRINLENGTH,V%LENGTH,,%LENGTH
]		;END OF IFN USELESS

IRP A,,[↑Q,↑W,↑R,↑A]B,,[TAPRED,TTYOFF,TAPWRT,SIGNAL]
	MKAV A,B
TERMIN

    ;; MAKES THE VALUE CELL POINT TO "PWIOINT"
	RMTAH1 ,,,WITHOUT-INTERRUPTS,,PWIOINT,%PIPN

	MKAV INTERRUPT-BOUND-VARIABLES,V%IBVL,NIL,,%PIPN
SA% 	MKAV [≠P]VDOLLRP,QDOLLRP,DOLLRP
SA$	MKAV [}P]VDOLLRP,QDOLLRP,DOLLRP
DOLLRP==QDOLLRP
	MKAV ↑D,GCGAGV,,CN.D

;;;  (UNDF-FNCTN, UNBND-VRBL, WRNG-TYPE-ARG,
;;;	UNSEEN-GO-TAG, WRNG-NO-ARGS, GC-LOSSAGE, FAIL-ACT,
;;;	IO-LOSSAGE) MUST BE IN THAT ORDER

IRP A,,[UDF,UBV,WTA,UGT,WNA,GCL,FAC]PN,,[UNDF-FNCTN,UNBND-VRBL
WRNG-TYPE-ARG,UNSEEN-GO-TAG,WRNG-NO-ARGS,GC-LOSSAGE,FAIL-ACT]
	MKAV PN,V!A,Q!A!B,A
TERMIN

	MKAV IO-LOSSAGE,VIOL,QIOLB,IOL
	MKAV COMPILER-STATE,VCOMST
	MKAV MACHINE-ERROR,VMERR,,MERR

	PGTOP ATM,[SYSTEM ATOMS AND STUFF]

;;;	************* END OF PURE LISP (NON-BIBOP) ************* 



  	PFSLAST==.	;GUARANTEED SAFE OVER SPCTOP
   10$ 	$LOSEG
  	LOC C.
  	ESYSVC==.
  	EXPUNGE C.

SUBTTL	RANDOM BINDABLE CELLS

;;; HERE ARE THINGS WHICH ARE LIKE VALUE CELLS, IN THAT SPECPDL
;;; UNBINDING MUST WORK ON THEM; BUT THEY ARE NOT NECESSARILY
;;; MARKED FROM.

LISAR:	NIL		;LAST INTERPRETIVELY-SEEN ARRAY - ASAR

TYIMAN:		$DEVICE	;WHERE TO GET CHARACTERS FROM
UNTYIMAN:	IUNTYI	;WHERE TO PUT BACK CHARACTERS TO
UNREADMAN:	.+1
		.VALUE
READPMAN:	.+1
	.VALUE


FASLP:	NIL		;FASLOADING-P?
TIRPATE:	0	;PSEUDO VALUE CELL, USED TO EXTIRPATE THE CONSEQUENT UNBINDING 
			;FOLLOWING A SETQ DONE ON NIL OR T

;;; #### MOOOBY IMPORTANT!  MUST HAVE <ADDRESS OF ARGNUM> = <ADDRESS OF ARGLOC> + 1
ARGLOC:	0		;FOR LEXPRS - LOCATION OF ARG VECTOR ON PDL
ARGNUM:	0		;HOLDS FIXNUM WHICH IS # OF ARGS FOR LEXPR IN ARGLOC


SUBTTL	BIBOP STORAGE PARAMETER CALCULATIONS

BFVCS:
INFVCS==BXVCSG-BFVCS
IFL INFVCS, WARN \-INFVCS,[=TOO MANY VALUE CELLS]
SPCTOP VC,ILS,[VALUE CELL]


LOC S.
EXPUNGE S. B.
IFL ESYMGS-1-.,	WARN \.-ESYMGS,[=TOO MANY SYMBOLS (SYMEST=]\SYMEST,[)]
SYMSYL==:.			;ADR OF LAST SYSTEM SYM
SPCTOP SYM,ILS,[SYMBOL HEADER]
IFE PAGING,[
	NXXASG==0
	NXXZSG==0
	$HISEG
]		;END OF IFE PAGING
IFN PAGING,[
	BXXASG==.
	NXXASG==<<<BXXASG+PAGSIZ-1>&PAGMSK>-BXXASG>/SEGSIZ
	BXXZSG==BXXASG+NXXASG*SEGSIZ	;TAKE UP SLACK PAGES BEFORE SY2
	NXXZSG==<BSY2SG-BXXZSG>/SEGSIZ
]		;END OF IFN PAGING


NSY2SG==<BPFXSG-BSY2SG>/SEGSIZ
SEGUP BSY2SG+NSY2SG*SEGSIZ-1
SPCTOP SY2,ILS,[PURE SYMBOL BLOCK]


LOC F.
EXPUNGE F.
IFL EPFXGS-1-HINUM-LONUM-., WARN \.+HINUM+LONUM-EPFXGS,[=TOO MANY PURE FIXNUMS (PFXEST=]\PFXEST,[)]

ZZ==EPFXGS-.
ZZZ==<ZZ-HINUM-LONUM>/2		; THEN TO THE NEXT PAGE BOUNDARY
XHINUM==HINUM+ZZZ		;DISTRIBUTE ANY SUCH EXTRA SPACE EVENLY
IFL XHINUM-777,XHINUM==777	;MANY LOSERS DEPEND ON HINUM BEING AT LEAST THIS BIG
XLONUM==ZZ-XHINUM		; BETWEEN POSITIVE AND NEGATIVE INUMS
IFL XLONUM-10,[
	WARN [XLONUM=]\XLONUM,[, YOU WILL CERTAINLY LOSE]
	.ERR INUM LOSSAGE
]
	REPEAT XLONUM, .RPCNT-XLONUM
IN0:		;HAIRY PAGE (APPROXIMATELY) OF SMALL FIXNUMS
REPEAT XHINUM, .RPCNT
IRP X,,[1,2,3,4,5,6,7,10,777]
	IN!X=IN0+X
TERMIN

INFORM [HIGHEST NLISP INUM=]\XHINUM
INFORM [LOWEST NLISP INUM=-]\XLONUM

SPCTOP PFX,ILS,[PURE FIXNUM]



LOC PFSLAST
SPCTOP PFS,ILS,[PURE LIST]
SPCBOT PFL
	;;; INITIAL ASSEMBLED PURE FLONUMS GO HERE (HA HA!)
SPCTOP PFL,ILS,[PURE FLONUM]
10$	$LOSEG

SUBTTL	INITIAL RANDOM IMPURE FREE STORAGE

IFN PAGING,[
	BXXPSG==.		;POSSIBLE SLACK PURE SEGMENT
	PAGEUP
	NXXPSG==<.-BXXPSG>/SEGSIZ
	SPCBOT IFS
	NPURFS==<.-BPURFS>/PAGSIZ
]		;END OF IFN PAGING
.ELSE,	SPCBOT IFS

FIRSTW:

QXSET1:	.,,NIL		;FOR XSETQ

	NUNMRK==.-FIRSTW		.SEE GCP6
	IFG NUNMRK-40, WARN \NUNMRK,[=TOO MANY UNMARKABLE FS LOCATIONS]

;;; PROPERTY LIST FOR "LISP" WITH ITS INITIAL "PPN" PROPERTY FOR LISP SYSTEM
;;;  FILE DIRECTORY SPECIFICAITON.  In TOPS-20 world, will possibly be
;;;  reset upon each start-up
PLLISP:	QPPN %
10$ INIT1Y:	
	Q%ALD,,NIL

IT$ FEATEX:		QEXPERIMENTAL %
FEATLS:			;INITIAL LIST FOR (STATUS FEATURES)
		QMACLISP %
		QPDP10 %
IFN BIGNUM,	QBIGNUM %
		QFASLOAD %
IFN HNKLOG,	QHUNK %
		QFUNARG %
IFN USELESS,	QROMAN %
		QNEWIO %
IFN SFA,	QSFA %
10$ HS%		QONESEGMENT %
PG$		QPAGING %
;; Beware! non-ITS depends upon OPSYFT having a CDR link to SITEFT, which
;;   the code in UDIRSET may splice out.
IFE ITS,[
OPSYFT:					;Operating system type --  on TOPS
10$ SA%		QTOPS10 %		; systems, we want this info as well
20$ 		QTOPS20 %		; as "FILE-SYSTEM-TYPE"
]	;END OF IFE ITS
;"SITE"
  ;Startup puts "AI", "ML", or "MC" here on ITS systems,
  ; "TOPS-20" or "TENEX" for DEC20 style systems
  ; "TOPS-10" or "CMU" for non-SAIL DEC10 style systems
  ;But may be spliced out by UDIRSET Code.
SITEFT:		
SA$		QSAIL %
SA%		NIL %	
;FILE SYSTEM TYPE COMES LAST
FILEFT:	
IT$		QITS,,NIL
10$		QDEC10,,NIL
20$		QDEC20,,NIL



;;; FROM BPROTECT, FOR DISTANCE LPROTECT, IS PROTECTED BY THE GARBAGE COLLECTOR.
.SEE GCP6Q2

BPROTECT:
BG$		BNV1,,ARGNUM	;TO PROTECT CONTENTS OF  THESE CELLS
BG%		 NIL,,ARGNUM
TLF:		NIL		;TOP LEVEL FORM - NIL FOR STANDARD
BLF:		NIL		;ANALOGOUSLY, THE BREAK LEVEL FORM
VCTRS:	0	;() OR LIST OF SUBR ADDRESSES  [ (VECTORP VECTOR-LENGTH VREF) ]
QF1SB:		NIL		;SAVE B DURING QF1
PA3:		0		;RH = PROG BODY (I.E. CDDR OF PROG FORM)
				;LH = NEXT PROG STATEMENT
GCPSAR:		0		;POINTS TO SAR FOR HASH ARRAY FOR GC-PROTECTION LISTS
	RDLARG:	NIL		;LIST OF CHARS FOR READLIST, MAKNAM, IMPLODE

SUDIR:		NIL		;INITIAL SNAME (ITS) OR PPN (DEC-10)
FEATURES:	FEATLS

LDFNAM:		NIL		;FASLOAD FILE NAME
LDEVPRO:	NIL		;LIST OF EVALED-FROBS-IN-ATOMTABLE TO BE PROTECTED


NILPROPS:	NIL		;PROPERTY LIST FOR NIL

DEOFFN:		NIL		;DEFAULT EOF FUNCTION
DENDPAGEFN:	NIL		;DEFAULT END OF PAGE FUNCTION

UUSRHNK:	NIL		;USER-HUNK checking routine
USENDI:		NIL		;User SEND interpreter
UCALLI:		NIL		;User CALL interpreter


LPROTECT==:.-BPROTECT

Q.=:QITIMES		;ALIASES FOR THE SYMBOL *
V.=:VITIMES
.HKILL QITIMES VITIMES

IGCMKL:	DEDSAR %		;DEAD AREA AT TOP OF BPS
	IGCFX1 %
	INIIFA %		;INIT FILE ARRAY
	IGCFX2,,NIL


	OBTFS:	BLOCK KNOB+10	;FREE STORAGE FOR OBARRAY CONSAGE
	LFSALC==100
	FSALC:	BLOCK LFSALC	;FOR ALLOC
	SPCTOP IFS,ILS,[IMPURE LIST]




  	SPCBOT IFX

BG$ BNV1:	.	;TEMPORARILY RPLACED BY BNCVTM



VBP1:	BBPSSG		;INITIAL ALLOCATED VALUE FOR BPORG
VBPE1:	INIIF1-2	;INITIAL ALLOCATED VALUE FOR BPEND

IGCFX1:
PG$	<<ENDLISP+PAGSIZ-1>&PAGMSK>-EINIFA	;SIZE OF DEAD BLOCK
PG%	0					;WILL BE CALCULATED BY ALLOC
IGCFX2:	LINIFA					;SIZE OF INIT FILE ARRAY




  	LFWSALC==40
  	FWSALC:	BLOCK LFWSALC	;FOR ALLOC
  	NIFWAL==0
  	SPCTOP IFX,ILS,[IMPURE FIXNUM]

	SPCBOT IFL
	1.0	;NEED AT LEAST ONE IMPURE FLONUM SEGMENT
	SPCTOP IFL,ILS,[IMPURE FLONUM]

IFN BIGNUM,[
	SPCBOT BN
BBIGPRO:		.SEE GCP6Q3	;PROTECTED BIGNUMS
BN235:	0,,BNM23A
BNM235:	-1,,BNM23A
BNM236:	-1,,BNM23B
BNV2:	0,,BNV2A
BN.1:	0,,BN.1A
LBIGPRO==.-BBIGPRO
	SPCTOP BN,ILS,[BIGNUM]
]		;END OF IFN BIGNUM

IFE BIGNUM,[
  	BBNSG==.
  	NBNSG==0
]		;END OF IFE BIGNUM

IFN PAGING,[
	BXXBSG==.		;TAKE UP SLACK UNTIL FIRST PAGE OF BPS
	PAGEUP
	NXXBSG==<.-BXXBSG>/SEGSIZ
]		;END OF IFN PAGING



IF2 GEXPUN
BLSTIM==.MRUNT-BLSTIM
INFORM [TIME TO MAKE INITIAL STRUCT, PASS ]\.PASS,[ = ]\BLSTIM/1000.,[ SECS]